home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-07-15 | 53.2 KB | 1,469 lines |
-
-
- Tag Image File Format Rev 4.0
- April 31, 1987
-
- This memorandum has been prepared jointly by Aldus and Microsoft in conjunction
- with leading scanner and printer manufacturers. This document does not
- represent a commitment on the part of either Microsoft or Aldus to provide
- support for this file format in any application. When responding to specific
- issues raised in this memo, or when requesting additional tag or field
- assignments, please address your correspondence to either:
-
- Tim Davenport Manny Vellon
- Aldus Corporation Windows Marketing Group
- 411 First Ave. South Microsoft Corporation
- Suite 200 16011 NE 36th Way
- Seattle, WA 98104 Box 97017
- Redmond, WA 98073-9717
-
-
- Revision Notes
-
- This release of the TIFF specification has been given a Revision number. It is
- really the fourth major revision, so the Revision number was set to 4.0.
-
-
- Abstract
-
- This document describes TIFF, a tag based file format that is designed to
- promote the interchange of digital image data.
-
- The fields were defined primarily with desktop publishing and related
- applications in mind, although it is conceivable that other sorts of imaging
- applications may find TIFF to be useful.
-
- The general scenario for which TIFF was invented assumes that applications
- software for scanning or painting creates a TIFF file, which can then be read
- and incorporated into a document or publication by an application such as a
- desktop publishing package.
-
- The intent of TIFF is to organize and codify existing practice with respect to
- the definition and usage of desktop digital data, not to blaze new paths or
- promote unproven techniques. Yet a very high priority has been given to
- structuring the data in such a way as to minimize the pain of future additions.
- TIFF was designed to be a very extensible interchange format.
-
- TIFF is not a printer language or page description language, nor is it intended
- to be a general document interchange standard. It may be useful as is for some
- image editing applications, but is probably inappropriate for and would thus
- need to be translated into some intermediate data structures by other image
- editing applications. The primary design goal was to provide a rich
- environment within which the exchange of image data between application
- programs can be accomplished. This richness is required in order to take
- advantage of the varying capabilities of scanners and similar devices. TIFF is
- therefore designed to be a superset of existing image file formats for desktop
- scanners (and paint programs and anything else that produces images with pixels
- in them) and will be enhanced on a continuing basis as new capabilities arise.
-
- Although TIFF is claimed to be in some sense a rich format, it can easily be
- used for simple scanners and applications as well, since the application
- developer need only be concerned with the capabilities that he requires. The
- mechanisms for accomplishing this goal are discussed in the next section.
-
- TIFF is intended to be independent of specific operating systems, filing
- systems, compilers, and processors. The only significant assumption is that
- the storage medium supports something like a file, defined as a sequence of
- 8-bit bytes, where the bytes are numbered from 0 to N. The largest possible
- TIFF file is 2**32 bytes. Since pointers (byte offsets) are used liberally, a
- TIFF file is most easily read from a random access device, although it is
- possible to read and write TIFF files on sequential media such as magnetic
- tape.
-
- The recommended MS-DOS file extension for TIFF files is .TIF. The recommended
- Macintosh filetype is TIFF. Conventions in other computing environments have
- not yet been established.
-
-
- 1) Conformance
-
- Many of the application programs that read the contents of TIFF image files
- will not support all of the features described in this document. In some
- cases, little more than the default options will be supported. It is up to
- each organization to determine the costs and benefits associated with different
- levels of conformity. Therefore, claims of conformity to this specification
- should be interpreted with a certain amount of caution.
-
- It follows that the usage of this specification does not preclude the need for
- coordination between image file writers and image file readers. It is up to
- the application designer that initially writes a file in this format to verify
- that the desired file options are supported by the applications that will read
- the file.
-
-
- 2) Structure
-
- In TIFF, individual fields are identified with a unique tag. This allows
- particular fields to be present or absent from the file as required by the
- application.
-
- Some TIFF files will have only a few fields in them; others will have many.
- Software that creates TIFF files should write out as many fields as it believes
- will be meaningful and useful (and no more). Software that reads TIFF files
- should do the best it can with the fields that it finds there.
-
- See Appendix A: Tag Structure Rationale.
-
- There are many ways in which a tag-oriented file format scheme can be
- implemented. TIFF uses the following approach:
-
- There are three main parts to a TIFF file. First is a short image file header.
- Next is a directory of all the fields that are to be found in this file.
- Finally, we have the data for the fields.
-
-
- 3) Header and Directory
-
- A TIFF file begins with a small amount of positionally defined data, containing
- the following information:
-
- Bytes 0-1:
-
- The first word of the file serves to specify the byte order used within the
- file. The currently defined values are:
-
- II (hex 4949)
- MM (hex 4D4D)
-
- In the II format, byte order is always from least significant to most
- significant, for both 16-bit and 32-bit integers.
-
- In the MM format, byte order is always from most significant to least
- significant, for both 16-bit and 32-bit integers.
-
- In both formats, character strings are stored into sequential byte locations.
-
- It is certainly not required that all applications software be able to handle
- both formats. It should be apparent which is the native format for a
- particular machine.
-
- Bytes 2-3:
-
- The second word of the file is the TIFF version number. This number shouldnt
- change. This document describes Version 42, so 42 (2A in hex) should be stored
- in this word.
-
- Bytes 4-7:
-
- This long word contains the offset (in bytes) of the first Image File
- Directory. The directory may be at any location in the file after the header
- but must begin on a word boundary.
-
- (The term byte offset is always used in this document to refer to a location
- with respect to the beginning of the file. The first byte of the file has an
- offset of 0.)
-
- An IFD consists of a 2-byte count of the number of entries (i.e., the number of
- fields), followed by a sequence of 12-byte field entries, followed by a 4-byte
- offset of the next Image File Directory (or 0 if none). Each 12-byte field
- entry has the following format:
-
- Bytes 0-1 contain the Tag for the field. Bytes 2-3 contain the field Type.
- Bytes 4-7 contain the Length (Count might have been a better term) of the
- field. Bytes 8-11 contain the file offset (in bytes) of the Value for the
- field. The Value is expected to begin on a word boundary; the corresponding
- file offset will thus be an even number.
-
- The entries in an IFD must be sorted in ascending order by Tag. Note that this
- is not the order in which the fields are described in this document. The
- Values to which directory entries point need not be in any particular order in
- the file.
-
- If the Value fits within 4 bytes, the Offset is interpreted to contain the
- Value instead of pointing to the Value, to save a little time and space. If
- the Value is less than 4 bytes, it is left-justified. Whether or not it fits
- within 4 bytes can be determined by looking at the Type and Length of the
- field.
-
- The Length part is specified in terms of the data type. A single 16-bit word
- (SHORT) has a Length of 1, not 2, for example. The data types and their
- lengths are described below:
-
- 1 = BYTE. 8-bit unsigned integer.
- 2 = ASCII. 8-bit bytes that store ASCII codes; the last byte must
- be null.
- 3 = SHORT. A 16-bit (2-byte) unsigned integer.
- 4 = LONG. A 32-bit (4-byte) unsigned integer.
- 5 = RATIONAL. Two LONGs: the first represents the numerator of a
- fraction, the second the denominator.
-
- The value of the Length part of an ASCII field entry includes the null. If
- padding is necessary, the Length does not include the pad byte.
-
- The reader should check the type to ensure that it is what he expects. TIFF
- currently allows more than 1 valid type for a given field. For example,
- ImageWidth and ImageLength were specified as having type SHORT. Very large
- images with more than 64k rows or columns are possible with some devices even
- now. Rather than add parallel LONG tags for these fields, it is cleaner to
- allow both SHORT and LONG for ImageWidth and similar fields. Writers of TIFF
- files are, however, encouraged to use the default type values as indicated in
- this document to insure compatbility with existing TIFF reader applications.
-
- Note that there may be more than one IFD. Each IFD is said to define a
- subfile. One potential use of subsequent subfiles is to describe a sub-image
- that is somehow related to the main image, such as a reduced resolution or
- screen resolution image. Another use is to represent multiple page images -
- for example, a facsimile document requiring more than one page. Subsequent
- IFDs will in general contain many of the same fields as the first IFD but will
- usually point to or contain different Values for those fields.
-
-
- 4) Definitions
-
- The TIFF structure itself is not specific to imaging applications in any way.
- It is only the definitions of the fields themselves that jointly describe an
- image. Before we begin describing the fields, a few image related definitions
- may be useful.
-
- An image is defined to be a rectangular array of pixels, each of which consists
- of one or more samples. With monochromatic data, we have one sample per pixel,
- and sample and pixel can be used interchangeably. Color data usually contains
- three samples per pixel, as in, for example, an RGB scheme.
-
-
- 5) The Fields
-
- The following fields are defined in this version of TIFF. More will be added
- in future versions, if possible in such a way so as not to break old software
- that encounters a newer TIFF file. An attempt has been made to group related
- fields, although the grouping is necessarily somewhat arbitrary.
-
- The documentation for each field contains the name of the field (quite
- arbitrary, but convenient), the Tag value, the field Type, the Number of Values
- (N) expected (per IFD, in the case of multiple subfiles), comments describing
- the field, and the default, if any. The default value is used if the field
- does not exist.
-
- A fairly large number of fields has already been defined, and the number will
- grow. Please keep in mind that many common images can be described using only
- a handful of these fields (see the Examples section).
-
-
- General Description
-
- SubfileType
- Tag = 255 (FF)
- Type = SHORT
- N = 1
-
- A general indication of the kind of data that is contained in this subfile.
- Currently defined values are:
- 1 = full resolution image data ImageWidth, ImageLength, and StripOffsets are
- required fields.
- 2 = reduced resolution image data ImageWidth, ImageLength, and StripOffsets
- are required fields. It is further assumed that a reduced resolution image is
- a reduced version of the entire extent of the corresponding full resolution
- data.
- 3 = Single page of a multi-page image (see the PageNumber tag description).
-
- If your kind of image data doesnt fit nicely into either description, contact
- either Aldus or Microsoft to define an additional value. Note that both image
- types can be found in a single TIFF file, with each subfile described by its
- own IFD.
- No default.
-
-
- Data Architecture
-
- ImageWidth
- Tag = 256 (100)
- Type = SHORT
- N = 1
-
- The images width, in pixels (X: horizontal). The number of columns in the
- image.
- No default.
-
-
- ImageLength
- Tag = 257 (101)
- Type = SHORT
- N = 1
-
- The images length (height) in pixels (Y: vertical). The number of rows
- (sometimes described as scan lines) in the image. ImageLength and ImageWidth
- refer only to how the pixels are stored in the file and do not imply anything
- about where the visual top or left side of the image may be. See Orientation
- for this information.
- No default.
-
-
- RowsPerStrip
- Tag = 278 (116)
- Type = SHORT or LONG
- N = 1
-
- The number of rows per strip. The image data is organized into strips for fast
- access to individual rows when the data is compressed (though this field is
- valid even if the data is not compressed).
-
- Note that either SHORT or LONG values can be used to specify RowsPerStrip.
- SHORT values may be used for small TIFF files. It should be noted, however,
- that earlier TIFF specifications required LONG values and that some software
- may not expect SHORT values.
-
- Default is 2**32 - 1, which is effectively infinity. That is, the entire image
- is one strip.
-
-
- [StripsPerImage]
- N = 1
-
- The number of strips per image. This value is not a field, since it can be
- computed from two other fields, but it is convenient to give it a name in order
- to clarify the use of other fields. The equation to use is StripsPerImage =
- (ImageLength + RowsPerStrip - 1) / RowsPerStrip, assuming integer arithmetic.
-
-
- StripOffsets
- Tag = 273 (111)
- Type = SHORT or LONG
- N = StripsPerImage for PlanarConfiguration equal to 1.
- = SamplesPerPixel * StripsPerImage for PlanarConfiguration equal to 2
-
- For each strip, the byte offset of that strip. The offset is specified with
- respect to the beginning of the TIFF file. Note that this implies that each
- strip has a location independent of the locations of other strips. This
- feature may be useful for certain editing applications. This field is the only
- way for a reader to find the image data, and hence must exist.
-
- Note that either SHORT or LONG values can be used to specify the strip offsets.
- SHORT values may be used for small TIFF files. It should be noted, however,
- that earlier TIFF specifications required LONG strip offsets and that some
- software may not expect SHORT values.
- No default.
-
-
- StripByteCounts
- Tag = 279 (117)
- Type = LONG
- N = StripsPerImage for PlanarConfiguration equal to 1.
- = SamplesPerPixel * StripsPerImage for PlanarConfiguration equal to 2
-
- For each strip, the number of bytes in that strip.
- No default.
-
-
- SamplesPerPixel
- Tag = 277 (115)
- Type = SHORT
- N = 1
-
- The number of samples per pixel. Usually 1 for monochromatic data and 3 for
- color data (i.e. one sample for each of the color planes.)
- Default = 1.
-
-
- BitsPerSample
- Tag = 258 (102)
- Type = SHORT
- N = SamplesPerPixel
-
- Number of bits per sample. Note that this tag allows a different number of
- bits per sample for each sample corresponding to a pixel. For example, RGB
- color data could use a different number of bits per sample for each of the
- three color planes.
- Default = 1.
-
-
- PlanarConfiguration
- Tag = 284 (11C)
- Type = SHORT
- N = 1
-
- 1 = the sample values for each pixel are stored contiguously, so that there is
- a single image plane. See PhotometricInterpretation to determine the order of
- the samples within the pixel data.
- 2 = the samples are stored in separate sample planes. The values in
- StripOffsets and StripByteCounts are then arranged as a 2-dimensional array,
- with SamplesPerPixel rows and StripsPerImage columns. (All of the columns for
- row 0 are stored first, followed by the columns of row 1, and so on.)
- PhotometricInterpretation describes the type of data that is stored in each
- sample plane.
-
- If SamplesPerPixel is 1, a PlanarConfiguration value of 1 is equivalent to a
- value of 2.
- No default.
-
-
- Compression
- Tag = 259 (103)
- Type = SHORT
- N = SamplesPerPixel for PlanarConfiguration equal to 1 or 2.
-
- Note that a value is provided for each sample, allowing different compression
- schemes to be applied to different planes of data.
-
- 1 = No compression, but pack data into bytes as tightly as possible, with no
- unused bits except at the end of a row. See also FillOrder. The bytes are
- stored as an array of type BYTE, for BitsPerSample <= 8, SHORT if BitsPerSample
- > 8 and <= 16, and LONG if BitsPerSample > 16 and <= 32. The byte ordering of
- data >8 bits must be consistent with that specified in the TIFF file header
- (bytes 0 and 1). Intel format files will have the least significant bytes
- preceeding the most significant bytes while Motorola format files will have the
- opposite.
-
- If the number of bits per sample is not a power of 2, and you are willing to
- give up some space for better performance, you may wish to use the next higher
- power of 2. For example, if your data can be represented in 6 bits, you may
- wish to specify that it is 8 bits deep. If you take this approach, you should
- be sure that MinSampleValue and MaxSampleValue are given correct values
- (probably 0 and 63 for intrinsically 6-bit data.) TIFF file readers should use
- MinSampleValue and MaxSampleValue to determine the range of values in the data
- rather than BitsPerSample.
-
- Rows are required to begin on byte boundaries.
-
- 2 = CCITT Group 3 1-Dimensional Modified Huffman run length encoding. See
- Appendix B: Data Compression Scheme 2. BitsPerSample must be 1, since this
- type of compression is defined only for binary images.
-
- 3 = Facsimile-compatible CCITT Group 3, exactly as specified in Standardization
- of Group 3 facsimile apparatus for document transmission, Recommendation T.4,
- Volume VII, Fascicle VII.3, Terminal Equipment and Protocols for Telematic
- Services, The International Telegraph and Telephone Consultative Committee
- (CCITT), Geneva, 1985, pages 16 through 31. Each strip must begin on a byte
- boundary. (But recall that an image can be a single strip.) Rows that are not
- the first row of a strip are not required to begin on a byte boundary. The
- data is stored as bytes, not words byte-reversal is not allowed. Note that
- the FillOrder field still applies. See the Group3Options field for Group 3
- options such as 1D vs 2D coding.
-
- 4 = Facsimile-compatible CCITT Group 4, exactly as specified in Facsimile
- Coding Schemes and Coding Control Functions for Group 4 Facsimile Apparatus,
- Recommendation T.6, Volume VII, Fascicle VII.3, Terminal Equipment and
- Protocols for Telematic Services, The International Telegraph and Telephone
- Consultative Committee (CCITT), Geneva, 1985, pages 40 through 48. Each strip
- must begin on a byte boundary. Rows that are not the first row of a strip are
- not required to begin on a byte boundary. The data is stored as bytes, not
- words. Note that the FillOrder field still applies. See the Group4Options
- field for Group 4 options.
-
- 32771 = the same thing as Compression type 1 (no compression), except that each
- row begins on the next available word boundary, instead of byte boundary.
-
- 32773 = PackBits compression, a relatively simple byte-oriented run-length
- scheme. See Appendix C.
-
- Data compression only applies to pixel data, as pointed to by StripOffsets.
- All other TIFF information is unaffected.
-
- To be determined are additional compression schemes for gray and colored
- images. We encourage your suggestions, especially if accompanied by full
- specifications and performance information. It is of course desirable to
- minimize the number of compression schemes that are being used, but this is
- clearly an area in which extremely significant time and space tradeoffs exist.
- Default = 1.
-
-
- Group3Options
- Tag = 292 (124)
- Type = LONG
- N = 1
-
- This field is made up of a set of 32 flag bits. Unused bits are expected to be
- 0. Bit 0 is the low-order bit. It is probably not safe to try to read the
- file if any bit of this field is set that you dont know the meaning of.
-
- Bit 0 is 1 for 2-dimensional coding (else 1-dimensional is assumed). For 2-D
- coding, if more than one strip is specified, each strip must begin with a
- 1-dimensionally coded line. That is, RowsPerStrip should be a multiple of
- Parameter K as documented in the CCITT specification.
-
- Bit 1 is 1 if uncompressed mode is used.
-
- Bit 2 is 1 if fill bits have been added as necessary before EOL codes such that
- EOL always ends on a byte boundary, thus ensuring an eol-sequence of a 1 byte
- preceded by a zero nibble: xxxx-0000 0000-0001.
-
- Default is 0, for basic 1-dimensional coding.
-
-
- Group4Options
- Tag = 293 (125)
- Type = LONG
- N = 1
-
- This field is made up of a set of 32 flag bits. Unused bits are expected to be
- 0. Bit 0 is the low-order bit. It is probably not safe to try to read the
- file if any bit of this field is set that you dont know the meaning of. Gray
- scale and color coding schemes are under study, and will be added when
- finalized.
-
- For 2-D coding, each strip is encoded as if it were a separate image. In
- particular, each strip begins on a byte boundary; and the coding for the first
- row of a strip is encoded independently of the previous row, using horizontal
- codes, as if the previous row is entirely white. Each strip ends with the
- 24-bit end-of-facsimile block (EOFB).
-
- Bit 0 is unused.
-
- Bit 1 is 1 if uncompressed mode is used.
-
- Default is 0, for basic 2-dimensional binary compression.
-
-
- FillOrder
- Tag = 266 (10A)
- Type = SHORT
- N = 1
-
- The order of data values within a byte.
- 1 = most significant bits of the byte are filled first. That is, data values
- (or code words) are ordered from high order bit to low order bit within a byte.
-
- 2 = least significant bits are filled first.
- Default is FillOrder = 1.
-
-
- Threshholding
- Tag = 263 (107)
- Type = SHORT
- N = 1
-
- 1 = a bilevel line art scan. BitsPerSample must be 1.
- 2 = a halftone or dithered scan, usually of continuous tone data such as
- photographs. BitsPerSample must be 1.
- 3 = Error Diffused.
- Default is Threshholding = 1.
-
-
- CellWidth
- Tag = 264 (108)
- Type = SHORT
- N = 1
-
- The width, in 1-bit samples, of the dithering/halftoning matrix. Assumes that
- Threshholding = 2. That is, this field is only relevant if Threshholding = 2.
-
- No default.
-
-
- CellLength
- Tag = 265 (109)
- Type = SHORT
- N = 1
-
- The length, in 1-bit samples, of the dithering/halftoning matrix. Assumes that
- Threshholding = 2. This field and the previous field may be useful for
- converting from halftoned to true gray level data.
- No default.
-
-
- Photometrics
-
- These fields are useful in determining the visual meaning of the sample data.
-
-
- MinSampleValue
- Tag = 280 (118)
- Type = SHORT
- N = SamplesPerPixel
-
- The minimum valid sample value.
- Default is 0.
-
-
- MaxSampleValue
- Tag = 281 (119)
- Type = SHORT
- N = SamplesPerPixel
-
- The maximum valid sample value.
- Default is 2**(BitsPerSample) - 1.
-
-
- PhotometricInterpretation
- Tag = 262 (106)
- Type = SHORT
- N = 1
-
- 0 = MinSampleValue should be imaged as white. MaxSampleValue should be imaged
- as black. If the bit-map represents gray scale, then the values between the
- minimum and maximum sample values should be interpreted according to either the
- gray scale response curve information (if included) or according to the result
- of some more arbitrary rule. See GrayResponseCurve.
-
- 1 = MinSampleValue should be imaged as black. MaxSampleValue should be imaged
- as white. If the bit-map represents gray scale, then the values between the
- minimum and maximum sample values should be interpreted according to either the
- gray scale response curve information (if included) or according to the result
- of some more arbitrary rule.
-
- 2 = RGB. In the RGB model, a color is described as a combination of the three
- primary colors of light (red, green, and blue) in particular concentrations.
- For each of the three samples, MinSampleValue represents minimum intensity, and
- MaxSampleValue represents maximum intensity. For PlanarConfiguration = 1, the
- samples are stored in the indicated order within a pixel: first Red, then
- Green, then Blue. For PlanarConfiguration = 2, the sample planes are stored in
- the indicated order: first the Red sample plane, then the Green plane, then
- the Blue plane.
-
- The Red, Green and Blue intensity values are defined according to the NTSC
- specifications for primary color chromaticity. These specifications assume the
- illumination to be CIE D6500. See the Red, Green and Blue color response curve
- tags.
-
- Note: some compression schemes, such as the CCITT schemes, imply a particular
- PhotometricInterpretation. Therefore, when reading such data, TIFF readers
- should ignore PhotometricInterpretation. And, ideally, TIFF writers should not
- write out the field when using one of these schemes.
-
- No default.
-
-
- GrayResponseUnit
- Tag = 290 (122)
- Type = SHORT
- N = 1
-
- 1 = number represents tenths of a unit.
- 2 = number represents hundredths of a unit.
- 3 = number represents thousandths of a unit.
- 4 = number represents ten-thousandths of a unit.
- 5 = number represents hundred-thousandths of a unit.
- Default is 2.
-
-
- GrayResponseCurve
- Tag = 291 (123)
- Type = SHORT
- N = 2**BitsPerSample
-
- The purpose of the gray response curve and the gray units is to further provide
- photometric interpretation information for gray scale image data. The gray
- response curve specifies for given levels of gray between the minimum and
- maximum sample values the actual photometric gray level of the value. It
- represents this gray level in terms of optical density.
-
- The GrayScaleResponseUnits specifies the accuracy of the information contained
- in the curve. Since optical density is specified in terms of fractional
- numbers, this tag is necessary to know how to interpret the stored integer
- information. For example, if GrayScaleResponseUnits is set to 4
- (ten-thousandths of a unit), and a GrayScaleResponseCurve number for gray level
- 4 is 3455, then the resulting actual value is 0.3455.
-
- If the gray scale response curve is known for the data in the TIFF file, and if
- the gray scale response of the output device is known, then an intelligent
- conversion can be made between the input data and the output device. For
- example, the output can be made to look just like the input. In addition, if
- the input image lacks contrast (as can be seen from the response curve), then
- appropriate contrast enhancements can be made.
-
- The purpose of the grey scale response curve is to act as a lookup table
- mapping values from 0 to 2**BitsPerSample-1 into specific intensity values.
- Refer to the PhotometricInterpretation tag to determine how the mapping should
- be done.
-
-
- ColorResponseUnit
- Tag = 300 (12C)
- Type = SHORT
- N = 1
-
- 1 = number represents tenths of a unit.
- 2 = number represents hundredths of a unit.
- 3 = number represents thousandths of a unit.
- 4 = number represents ten-thousandths of a unit.
- 5 = number represents hundred-thousandths of a unit.
- Default is 2.
-
-
- ColorResponseCurves
- Tag = 301 (12D)
- Type = SHORT
- N = 2**BitsPerSample (for Red samples) +
- 2**BitsPerSample (for Green samples) +
- 2**BitsPerSample (for Blue samples)
-
- This tag defines three color response curves (one each for Red, Green and Blue
- color information). The curves are stored sequentially (in red-green-blue
- order). The size of each table is 2**BitsPerSample, using the BitsPerSample
- value corresponding to the respective color. The ColorResponseUnit further
- specifies how each entry in the table is to be interpreted.
-
- The purpose of the color response curves is to act as a lookup table mapping
- values from 0 to 2**BitsPerSample-1 into specific intensity values. The
- intensity values are as specified by the NTSC color strandard assuming
- illumination to be CIE D6500.
-
-
- Correspondence to the Physical World
-
- XResolution
- Tag = 282 (11A)
- Type = RATIONAL
- N = 1
-
- The number of pixels per ResolutionUnit (see below) in the X direction, i.e.,
- in the ImageWidth direction. It is, of course, not mandatory that the image be
- actually printed at the size implied by this parameter. It is up to the
- application to use this information as it wishes.
-
- As is the case for many of these fields, XResolution may be invalid and
- irrelevant for some images (e.g., images made with a hand-held digitizing
- camera, which has a three-dimensional nature) and should therefore be absent
- from the image file.
- No default.
-
-
-
- YResolution
- Tag = 283 (11B)
- Type = RATIONAL
- N = 1
-
- The number of pixels per ResolutionUnit in the Y direction, i.e., in the
- ImageLength direction.
- No default.
-
-
- ResolutionUnit
- Tag = 296 (128)
- Type = SHORT
- N = 1
-
- To be used with XResolution and YResolution.
- 1 = no absolute unit of measurement. Used for images that may have a
- non-square aspect ratio, but no meaningful absolute dimensions.
- 2 = inch
- 3 = centimeter
- Default is 2
-
-
- Orientation
- Tag = 274 (112)
- Type = SHORT
- N = 1
-
- 1 = The 0th row represents the visual top of the image, and the 0th column
- represents the visual left hand side.
- 2 = The 0th row represents the visual top of the image, and the 0th column
- represents the visual right hand side.
- 3 = The 0th row represents the visual bottom of the image, and the 0th column
- represents the visual right hand side.
- 4 = The 0th row represents the visual bottom of the image, and the 0th column
- represents the visual left hand side.
- 5 = The 0th row represents the visual left hand side of the image, and the 0th
- column represents the visual top.
- 6 = The 0th row represents the visual right hand side of the image, and the
- 0th column represents the visual top.
- 7 = The 0th row represents the visual right hand side of the image, and the
- 0th column represents the visual bottom.
- 8 = The 0th row represents the visual left hand side of the image, and the 0th
- column represents the visual bottom.
- Default is 1.
-
-
- Document Context
-
- DocumentName
- Tag = 269 (10D)
- Type = ASCII
-
- The name of the document from which this image was scanned.
- No default.
-
-
- PageName
- Tag = 285 (11D)
- Type = ASCII
-
- The name of the page from which this image was scanned.
- No default.
-
-
- XPosition
- Tag = 286 (11E)
- Type = RATIONAL
-
- The X offset of the left side of the image, with respect to the left side of
- the page, in inches.
- No default.
-
-
- YPosition
- Tag = 287 (11F)
- Type = RATIONAL
-
- The Y offset of the top of the image, with respect to the top of the page, in
- inches. In the TIFF coordinate scheme, the positive Y direction is down, so
- that YPosition is always positive.
- No default.
-
-
- PageNumber
- Tag = 297 (129)
- Type = SHORT
- N = 2
-
- This tag is used to specify page numbers of a multiple page (e.g. facsimile)
- document. Two SHORT values are specified. The first value is the page number;
- the second value is the total number of pages in the document.
-
- Note that pages need not appear in numerical order.
-
-
-
- Miscellaneous Strings
-
- ImageDescription
- Tag = 270 (10E)
- Type = ASCII
-
- Useful or interesting information about the image.
- No default.
-
-
- Make
- Tag = 271 (10F)
- Type = ASCII
-
- The name of the scanner manufacturer.
- No default.
-
-
- Model
- Tag = 272 (110)
- Type = ASCII
-
- The model name/number of the scanner.
- No default.
-
-
- Storage Management
-
- These fields may be useful in certain dynamic editing situations. Software
- that merely reads TIFF files will probably not need to care about these fields.
- And, of course, software that creates TIFF files is by no means required to
- write these fields.
-
- FreeOffsets
- Tag = 288 (120)
- Type = LONG
-
- For each free block in the file, its byte offset.
- No default.
-
-
- FreeByteCounts
- Tag = 289 (121)
- Type = LONG
-
- For each free block in the file, the number of bytes in the block.
-
-
-
- 6) Examples
-
- A binary image from a paint program might contain only SubfileType, ImageWidth,
- ImageLength, StripOffsets, and PhotometricInterpretation fields.
-
- A typical line art scan might require that XResolution and YResolution be added
- to the above list.
-
-
-
- 7) Private Fields
-
- An organization may wish to store with the image file information that is
- meaningful only to that organization. Tags numbered 32768 or higher are
- reserved for that purpose. Upon request, the administrator will allocate and
- register a block of private tags for an organization, to avoid possible
- conflicts with other organizations.
-
- Private enumerated values can be accommodated in a similar fashion.
- Enumeration constants numbered 32768 or higher are reserved for private usage.
- Upon request, the administrator will allocate and register a block of
- enumerated values for a particular field, to avoid possible conflicts.
-
- Tags and values which are allocated in the private number range are not
- prohibited from being included in a future revision of this specification.
- Several such instances can be found in this revision.
-
-
- 8) A List of Possible Future Enhancements
-
- In the future TIFF will very likely be expanded to support more compression
- schemes, more photometric schemes, color lookup tables, and non-rectangular
- images. Please refer all questions regarding enhancements to TIFF to the
- contacts listed at the beginning of the document. Written submissions should
- be in Microsoft Windows Write format, to ensure timely and error-free
- incorporation into the specification.
-
- Tag Image File Format Rev 4.0
- April 31, 1987
-
- Appendix A: Tag Structure Rationale
-
-
- A file format is defined by both form (structure) and content. The content
- of TIFF consists of definitions of individual fields. It is therefore the
- content that we are ultimately interested in. The structure merely tells us
- how to find the fields.
-
- Yet the structure deserves serious consideration for a number of reasons that
- are not at all obvious at first glance. Since the structure described herein
- departs significantly from several other approaches, it may be useful to
- discuss the rationale behind it.
-
- The simplest, most straightforward structure for something like an image file
- is a positional format. In a positional scheme, the location of the data
- defines what the data means. For example, the field for number of rows might
- begin at byte offset 30 in the image file.
-
- This approach is simple and easy to implement and is perfect for static
- environments. But if a significant amount of ongoing change must be
- accommodated, some subtle problems start showing up. For example, suppose
- that a field must be superseded by a new, more general field. You could bump
- a version number to flag the change. Then new software has no problem doing
- something sensible with old data, and all old software will reject the new
- data, even software that didnt care about the old field. This may seem like
- no more than a minor annoyance at first glance, but causing old software to
- break more often than it would really need to can be very costly and,
- inevitably, causes much gnashing of teeth among customers.
-
- Furthermore, it can be avoided. One approach is to store a valid flag bit
- for each field. Now you dont have to bump the version number, as long as you
- can put the new field somewhere that doesnt disturb any of the old fields.
- Old software that didnt care about that old field anyway can continue to
- function. (Old software that did care will of course have to give up, but
- this is an unavoidable price to be paid for the sake of progress, barring
- total omniscience.)
-
- Another problem that crops up frequently is that certain fields are likely to
- make sense only if other fields have certain values. This is not such a
- serious problem in practice; it just makes things more confusing.
- Nevertheless, we note that the valid flag bits described in the previous
- paragraph can help to clarify the situation.
-
- Field-dumping programs can be very helpful for diagnostic purposes. A
- desirable characteristic of such a program is that it doesnt have to know
- much about what it is dumping. In particular, it would be nice if the
- program could dump ASCII data in ASCII format, integer data in integer
- format, and so on, without having to teach the program about new fields all
- the time. So maybe we should add a data type component to our fields, plus
- information on how long the field is, so that our dump program can walk
- through the fields without knowing what the fields mean.
-
- But note that if we add one more component to each field, namely a tag that
- tells what the field means, we can dispense with the valid flag bits, and we
- can also avoid wasting space on the non-valid fields in the file. Simple
- image creation applications can write out several fields and be done.
-
- We have now derived the essentials of a tag based image file format.
-
- Finally, a caveat. A tag based scheme cannot guarantee painless growth. But
- is does provide a useful tool to assist in the process.
-
-
-
-
- Table 1/T.4
-
- Make-up codes
-
- Terminating codes
-
-
- White run Code word Black run Code word
- length length
-
- 0 00110101 0 0000110111
- 1 000111 1 010
- 2 0111 2 11
- 3 1000 3 10
- 4 1011 4 011
- 5 1100 5 0011
- 6 1110 6 0010
- 7 1111 7 00011
- 8 10011 8 000101
- 9 10100 9 000100
- 10 00111 10 0000100
- 11 01000 11 0000101
- 12 001000 12 0000111
- 13 000011 13 00000100
- 14 110100 14 00000111
- 15 110101 15 000011000
- 16 101010 16 0000010111
- 17 101011 17 0000011000
- 18 0100111 18 0000001000
- 19 0001100 19 00001100111
- 20 0001000 20 00001101000
- 21 0010111 21 00001101100
- 22 0000011 22 00000110111
- 23 0000100 23 00000101000
- 24 0101000 24 00000010111
- 25 0101011 25 00000011000
- 26 0010011 26 000011001010
- 27 0100100 27 000011001011
- 28 0011000 28 000011001100
- 29 00000010 29 000011001101
- 30 00000011 30 000001101000
- 31 00011010 31 000001101001
- 32 00011011 32 000001101010
- 33 00010010 33 000001101011
- 34 00010011 34 000011010010
- 35 00010100 35 000011010011
- 36 00010101 36 000011010100
- 37 00010110 37 000011010101
- 38 00010111 38 000011010110
- 39 00101000 39 000011010111
- 40 00101001 40 000001101100
- 41 00101010 41 000001101101
- 42 00101011 42 000011011010
- 43 00101100 43 000011011011
- 44 00101101 44 000001010100
- 45 00000100 45 000001010101
- 46 00000101 46 000001010110
- 47 00001010 47 000001010111
- 48 00001011 48 000001100100
- 49 01010010 49 000001100101
- 50 01010011 50 000001010010
- 51 01010100 51 000001010011
- 52 01010101 52 000000100100
- 53 00100100 53 000000110111
- 54 00100101 54 000000111000
- 55 01011000 55 000000100111
- 56 01011001 56 000000101000
- 57 01011010 57 000001011000
- 58 01011011 58 000001011001
- 59 01001010 59 000000101011
- 60 01001011 60 000000101100
- 61 00110010 61 000001011010
- 62 00110011 62 000001100110
- 63 00110100 63 000001100111
-
-
-
- Table 2/T.4
-
- Make-up codes
-
-
- White run Code word Black run Code word
- length length
-
- 64 11011 64 0000001111
- 128 10010 128 000011001000
- 192 010111 192 000011001001
- 256 0110111 256 000001011011
- 320 00110110 320 000000110011
- 384 00110111 384 000000110100
- 448 01100100 448 000000110101
- 512 01100101 512 0000001101100
- 576 01101000 576 0000001101101
- 640 01100111 640 0000001001010
- 704 011001100 704 0000001001011
- 768 011001101 768 0000001001100
- 832 011010010 832 0000001001101
- 896 011010011 896 0000001110010
- 960 011010100 960 0000001110011
- 1024 011010101 1024 0000001110100
- 1088 011010110 1088 0000001110101
- 1152 011010111 1152 0000001110110
- 1216 011011000 1216 0000001110111
- 1280 011011001 1280 0000001010010
- 1344 011011010 1344 0000001010011
- 1408 011011011 1408 0000001010100
- 1472 010011000 1472 0000001010101
- 1536 010011001 1536 0000001011010
- 1600 010011010 1600 0000001011011
- 1664 011000 1664 0000001100100
- 1728 010011011 1728 0000001100101
- EOL 000000000001 EOL 000000000001
-
-
-
- Note it is recognized that machines exist which accommodate larger paper
- widths whilst maintaining the standard horizontal resolution. This option
- has been provided for by the addition of the Make-up code set defined as
- follows:
-
-
- Run length Make-up codes
- (black and white)
-
- 1792 00000001000
- 1856 00000001100
- 1920 00000001101
- 1984 000000010010
- 2048 000000010011
- 2112 000000010100
- 2176 000000010101
- 2240 000000010110
- 2304 000000010111
- 2368 000000011100
- 2432 000000011101
- 2496 000000011110
- 2560 000000011111
-
-
-
-
- Appendix B: Data Compression Scheme 2
-
-
- Abstract
-
- This document describes a method for compressing bilevel data that is based
- on the CCITT Group 3 1D facsimile compression scheme. It is intended that it
- be used in conjunction with the Tag Image File Format.
-
-
- References
-
- 1. Standardization of Group 3 facsimile apparatus for document transmission,
- Recommendation T.4, Volume VII, Fascicle VII.3, Terminal Equipment and
- Protocols for Telematic Services, The International Telegraph and Telephone
- Consultative Committee (CCITT), Geneva, 1985, pages 16 through 31.
-
- 2. Facsimile Coding Schemes and Coding Control Functions for Group 4
- Facsimile Apparatus, Recommendation T.6, Volume VII, Fascicle VII.3, Terminal
- Equipment and Protocols for Telematic Services, The International Telegraph
- and Telephone Consultative Committee (CCITT), Geneva, 1985, pages 40 through
- 48.
-
-
- Relationship to the CCITT Specifications
-
- The CCITT Group 3 and Group 4 specifications describe communications
- protocols for a particular class of devices. They are not by themselves
- sufficient to describe a disk data format. Fortunately, however, the CCITT
- coding schemes can be readily adapted to this different environment. The
- following is one such adaptation.
-
-
- Coding Scheme
-
- A line (row) of data is composed of a series of variable length code words.
- Each code word represents a run length of either all white or all black.
- (Actually, more than one code word may be required to code a given run, in a
- manner described below.) White runs and black runs alternate.
-
- In order to ensure that the receiver (decompressor) maintains color
- synchronization, all data lines will begin with a white run length code word
- set. If the actual scan line begins with a black run, a white run length of
- zero will be sent (written). Black or white run lengths are defined by the
- code words in Tables 1 and 2. The code words are of two types: Terminating
- code words and Make-up code words. Each run length is represented by zero or
- more Make-up code words followed by exactly one Terminating code word.
-
- Run lengths in the range of 0 to 63 pels (pixels) are encoded with their
- appropriate Terminating code word. Note that there is a different list of
- code words for black and white run lengths.
-
- Run lengths in the range of 64 to 2623 (2560+63) pels are encoded first by
- the Make-up code word representing the run length that is nearest to, not
- longer than, that required. This is then followed by the Terminating code
- word representing the difference between the required run length and the run
- length represented by the Make-up code.
-
- Run lengths in the range of lengths longer than or equal to 2624 pels are
- coded first by the Make-up code of 2560. If the remaining part of the run
- (after the first Make-up code of 2560) is 2560 pels or greater, additional
- Make-up code(s) of 2560 are issued until the remaining part of the run
- becomes less than 2560 pels. Then the remaining part of the run is encoded
- by Terminating code or by Make-up code plus Terminating code, according to
- the range mentioned above.
-
- It is considered an unrecoverable error if the sum of the run lengths for a
- line do not equal the value of the ImageWidth field.
-
- New rows always begin on the next available byte boundary.
-
- No EOL code words are used. No fill bits are used, except for the ignored
- bits at the end of the last byte of a row. RTC is not used.
-
-
-
-
- Appendix C: Data Compression Scheme 32773 PackBits
-
-
- Abstract
-
- This document describes a compression scheme for paint type files. It is
- intended for use in conjunction with the Tag Image File Format.
-
-
- 1) Motivation
-
- The current TIFF specification allows for two compression schemes.
- Compression type 1 is really no compression, other than basic pixel packing.
- Compression type 2, based on CCITT 1D compression, is powerful, but not
- trivial to implement and is designed for scanned data more than data
- generated by paint programs. Simple byte-oriented run length schemes tend to
- work well with paint data, since paint data often has large areas of white
- space and areas filled with 8-bit patterns.
-
-
- 2) Description
-
- Since several good schemes already exist, we may as well use one of them. We
- somewhat arbitrarily pick the Macintosh PackBits scheme. It is byte
- oriented, so there is no problem with word alignment. And it has a good
- worst case behavior (at most 1 extra byte for every 128 input bytes). For
- Macintosh users, there are toolbox utilities PackBits and UnPackBits that
- will do the work for you, but it is easy to implement your own.
-
- A pseudo code fragment to unpack it might look like this:
-
- Loop until you get the number of unpacked bytes you are expecting:
- Read the next source byte into n.
- If n is between 0 and 127 inclusive, copy the next n+1 bytes literally.
- Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times.
- Else if n is 128, noop.
- Endloop
-
- In the inverse routine, its best to encode a 2 byte repeat run as a replicate
- run except when preceded and followed by a literal run, in which case its
- best to merge the three into one literal run. Always encode 3 byte repeats
- as replicate runs.
-
- So thats the algorithm. Other rules:
-
- Each row must be packed separately. Do not compress across row boundaries.
-
- The number of uncompressed bytes per row is defined to be (ImageWidth + 7) /
- 8. If the uncompressed bitmap is required to have an even number of bytes
- per row, decompress into word-aligned buffers.
-
- If a run is larger than 128 bytes, simply encode the remainder of the run as
- one or more additional replicate runs.
-
- When PackBits data is uncompressed, the result should be interpreted as per
- compression type 1 (no compression); i.e. the SamplesPerPixel, BitsPerSample
- and PlanarConfiguration tags should be consulted to interpret the image.
-
-
-
-
- Appendix D: Using the Microsoft Windows Clipboard
-
- The Microsoft Windows Clipboard provides a mechanism that allows applications
- to pass information to each other. Pictures created in Microsoft Paint, for
- example, may be passed as bitmaps to Microsoft Write.
-
- In general, the Clipboard is not recommended as a way of passing TIFF
- information between applications. The amount of data associate with image
- data can be very large. Currently, data passed through the Microsoft Windows
- Clipboard is limited to 64K bytes. It is suggested that applications employ
- file-based mechanisms to exchange TIFF data. Aldus PageMaker, for example,
- implements a File Place command to allow TIFF files to be imported.
-
- For images requiring less than 64K bytes of TIFF data, a new Clipboard format
- has been defined:
-
- CF_TIFF Microsoft Tag Image File Format
-
- (this symbol will be defined in the windows.h file distributed with the
- Microsoft Windows Software Development Kit.)
-
- The data associated with this format is a handle to a block of global memory
- containing the same data as would be stored in a disk TIFF file. When
- interpreting this memory, TIFF readers should interpret file offsets as
- offsets from the beginning of the memory block.
-
- Applications that are capable of passing TIFF information through the
- Microsoft Windows Clipboard should preferably not render the TIFF information
- until requested to do so. In addition to passingTIFF data, these
- applications should also place bitmaps (Clipboard format CF_BITMAP) on the
- Clipboard corresponding to the TIFF data. Applications should judge whether
- to render these bitmaps formatted for the display or for the currently
- selected output device. Placing a bitmap on the Clipboard will allow the
- Clipboard viewer application (CLIPBRD.EXE) to display a likeness of the image
- and will allow non-TIFF applications to import, at least, an approximate
- bitmap. These and other Clipboard techniques are described in the Microsoft
- Windows Programming Guide, a document in the Microsoft Windows Software
- Development Kit.
-
-
-
-
- Appendix E: Numerical List of TIFF Tags
-
-
- SubfileType
- Tag = 255 (FF)
- Type = SHORT
- N = 1
-
- ImageWidth
- Tag = 256 (100)
- Type = SHORT
- N = 1
-
- ImageLength
- Tag = 257 (101)
- Type = SHORT
- N = 1
-
- BitsPerSample
- Tag = 258 (102)
- Type = SHORT
- N = SamplesPerPixel
-
- Compression
- Tag = 259 (103)
- Type = SHORT
- N = SamplesPerPixel for PlanarConfiguration equal to 1 or 2.
-
- PhotometricInterpretation
- Tag = 262 (106)
- Type = SHORT
- N = 1
-
- Threshholding
- Tag = 263 (107)
- Type = SHORT
- N = 1
-
- CellWidth
- Tag = 264 (108)
- Type = SHORT
- N = 1
-
- CellLength
- Tag = 265 (109)
- Type = SHORT
- N = 1
-
- FillOrder
- Tag = 266 (10A)
- Type = SHORT
- N = 1
-
- DocumentName
- Tag = 269 (10D)
- Type = ASCII
-
- ImageDescription
- Tag = 270 (10E)
- Type = ASCII
-
- Make
- Tag = 271 (10F)
- Type = ASCII
-
- Model
- Tag = 272 (110)
- Type = ASCII
-
- StripOffsets
- Tag = 273 (111)
- Type = SHORT or LONG
- N = StripsPerImage for PlanarConfiguration equal to 1.
- = SamplesPerPixel * StripsPerImage for PlanarConfiguration equal to 2
-
- Orientation
- Tag = 274 (112)
- Type = SHORT
- N = 1
-
- SamplesPerPixel
- Tag = 277 (115)
- Type = SHORT
- N = 1
-
- RowsPerStrip
- Tag = 278 (116)
- Type = SHORT or LONG
- N = 1
-
- StripByteCounts
- Tag = 279 (117)
- Type = LONG
- N = StripsPerImage for PlanarConfiguration equal to 1.
- = SamplesPerPixel * StripsPerImage for PlanarConfiguration equal to 2
-
- MinSampleValue
- Tag = 280 (118)
- Type = SHORT
- N = SamplesPerPixel
-
- MaxSampleValue
- Tag = 281 (119)
- Type = SHORT
- N = SamplesPerPixel
-
- XResolution
- Tag = 282 (11A)
- Type = RATIONAL
- N = 1
-
- YResolution
- Tag = 283 (11B)
- Type = RATIONAL
- N = 1
-
- PlanarConfiguration
- Tag = 284 (11C)
- Type = SHORT
- N = 1
-
- PageName
- Tag = 285 (11D)
- Type = ASCII
-
- XPosition
- Tag = 286 (11E)
- Type = RATIONAL
-
- YPosition
- Tag = 287 (11F)
- Type = RATIONAL
-
- FreeOffsets
- Tag = 288 (120)
- Type = LONG
-
- FreeByteCounts
- Tag = 289 (121)
- Type = LONG
-
- GrayResponseUnit
- Tag = 290 (122)
- Type = SHORT
- N = 1
-
- GrayResponseCurve
- Tag = 291 (123)
- Type = SHORT
- N = 2**BitsPerSample
-
- Group3Options
- Tag = 292 (124)
- Type = LONG
- N = 1
-
- Group4Options
- Tag = 293 (125)
- Type = LONG
- N = 1
-
- ResolutionUnit
- Tag = 296 (128)
- Type = SHORT
- N = 1
-
- PageNumber
- Tag = 297 (129)
- Type = SHORT
- N = 2
-
- ColorResponseUnit
- Tag = 300 (12C)
- Type = SHORT
- N = 1
-
- ColorResponseCurves
- Tag = 301 (12D)
- Type = SHORT
- N = 2**BitsPerSample (for Red sample)+
- 2**BitsPerSample (for Green sample)+
- 2**BitsPerSample(for Blue sample)
-
-
-
-